package com.marketingcenter.common;

/**
 * 业务异常类
 * 用于表示系统中的业务逻辑错误
 */
public class BusinessException extends RuntimeException {
    
    // 错误码
    private int code;
    
    // 默认错误码
    public static final int DEFAULT_ERROR_CODE = 500;
    
    // 常见业务错误码
    public static final int PARAM_ERROR = 400;  // 参数错误
    public static final int NOT_FOUND = 404;    // 资源不存在
    public static final int UNAUTHORIZED = 401; // 未授权
    public static final int FORBIDDEN = 403;    // 禁止访问
    public static final int SERVER_ERROR = 500; // 服务器错误

    /**
     * 构造函数
     * @param message 错误消息
     */
    public BusinessException(String message) {
        super(message);
        this.code = DEFAULT_ERROR_CODE;
    }

    /**
     * 构造函数
     * @param code 错误码
     * @param message 错误消息
     */
    public BusinessException(int code, String message) {
        super(message);
        this.code = code;
    }

    /**
     * 构造函数
     * @param message 错误消息
     * @param cause 异常原因
     */
    public BusinessException(String message, Throwable cause) {
        super(message, cause);
        this.code = DEFAULT_ERROR_CODE;
    }

    /**
     * 构造函数
     * @param code 错误码
     * @param message 错误消息
     * @param cause 异常原因
     */
    public BusinessException(int code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }

    /**
     * 获取错误码
     * @return 错误码
     */
    public int getCode() {
        return code;
    }

    /**
     * 设置错误码
     * @param code 错误码
     */
    public void setCode(int code) {
        this.code = code;
    }

    @Override
    public String toString() {
        return "BusinessException{" +
                "code=" + code +
                ", message='" + getMessage() + '\'' +
                '}';
    }
}